/*wizzard.
 * ThreadModelos.java
 *
 * Created on 25 de mayo de 2006, 05:30 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package ig.metrica.ui.modelo;

import ejb.metrica.matriz.correlacion.MatrizCorrelacionSBBean;
import ejb.metrica.matriz.correlacion.MatrizDTO;
import ig.metrica.riesgo.MatrizCorrelacionPK;
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.Context;
import javax.swing.JInternalFrame;

/**
 *
 * @author jsanchez
 */
public class ThreadModelosWork extends Thread {

    ThreadModelos dialogo = null;
    WizzardModelo wizzard = null;
    private Properties prop = null;

    {
        prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, ig.util.ejb.IGBean.INITIAL_CONTEXT_FACTORY);
        String Sockec = new ig.util.ConexionServer().getSocketServer();
        prop.put(Context.PROVIDER_URL, Sockec);
    }

    public ThreadModelosWork(ThreadModelos threadModelos, WizzardModelo wizzard) {
        this.dialogo = threadModelos;
        this.wizzard = wizzard;
    }

    @Override
    public void run() {
        wizzard.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        try {
            dialogo.setWizzard(this.wizzard);
            ThreadModelosWork.sleep(1500);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        ///working

        try {
            wizzard.pantallas.clear();
            wizzard.datosbasicos = null;
            wizzard.pantallas.add(wizzard.datosbasicos = new PantallaDatosBasicosModelo(this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Datos basicos\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(1, "Datos basicos\n");
        }

        try {
            wizzard.asociacionfactores = null;
            wizzard.pantallas.add(wizzard.asociacionfactores = new PantallaAsociacionFactorContrato(wizzard, this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3n Factores Contratos\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Asociaci\u00F3n Factores Contratos\n");
        }

        try {
            wizzard.asociacionfactoresmatriz = null;
            wizzard.pantallas.add(wizzard.asociacionfactoresmatriz = new PantallaAsociacionFactoresMatriz(wizzard, this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3n Factores Matriz\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Asociaci\u00F3n Factores Matriz\n");
        }

        dialogo.setDatosbasicos(wizzard.datosbasicos);//por si acaso
        dialogo.setProgreso(1, "Datos basicos\n");
        dialogo.setProgreso(1, "Asociaci\u00F3n Factores Contratos\n");
        dialogo.setProgreso(1, "Asociaci\u00F3n Factores Matriz\n");
        try {
            wizzard.definicioncambioesperado = null;
//            this.printHT(asociacionfactoresmatriz.getRelacionMonedasFactores(),"asociacionfactoresmatriz");
//            this.printHT(definicioncambioesperado.getRelacionMonedasFactores(),"definicioncambioesperado");
            wizzard.pantallas.add(wizzard.definicioncambioesperado = new PantallaDefinicionCambioEsperadoFactores(wizzard.asociacionfactores, wizzard.asociacionfactoresmatriz, wizzard.datosbasicos, this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Cambios Esperados\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Definici\u00F3n Cambios Esperados\n");
        }

        try {
            wizzard.definicionbandasriesgo = null;
            wizzard.pantallas.add(wizzard.definicionbandasriesgo = new PantallaDefinicionBandasRiesgo(this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Bandas Riesgo\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Definici\u00F3n Bandas Riesgo\n");
        }
        try {
            wizzard.definicionparametrosliquidez = null;
            wizzard.pantallas.add(wizzard.definicionparametrosliquidez = new PantallaDefinicionParametrosLiquidez(wizzard.datosbasicos, this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Parametros Liquidez\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Definici\u00F3n Parametros Liquidez\n");
        }

        try {
            wizzard.definicionparametrosrentabilidad = null;
            wizzard.pantallas.add(wizzard.definicionparametrosrentabilidad = new PantallaDefinicionParametrosRentabilidad(this.dialogo));
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Parametros Rentabilidad\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, "Definici\u00F3n Parametros Rentabilidad\n");
        }

        try {
            wizzard.configuracion = null;
            wizzard.pantallas.add(wizzard.configuracion = new PantallaConfiguracion(this.dialogo, this.wizzard));
        } catch (Exception ex) {
            dialogo.setMensaje("Configuraci\u00F3nes extras\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(0, "Configuraci\u00F3nes extras\n");
        }

        try {
            dialogo.setProgreso(0, "Organizando datos 1% .");
            wizzard.setPantallasWizzard(wizzard.pantallas, wizzard.pantallaBusqueda);
        } catch (Exception ex) {
            dialogo.setMensaje( ex.getMessage()+"\n"+ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(7, ".");
        }

        try {
            wizzard.asociacionfactoresmatriz.setSelectIdMatriz(wizzard.getModelo().getIdmatriz());
        } catch (Exception ex) {
            dialogo.setMensaje("No se encontro el identificador de la matriz relacionada al modelo\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.configuracion.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Configuracion Flujos\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.asociacionfactoresmatriz.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Asociacion factores matriz\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.datosbasicos.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Datos basicos\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.asociacionfactores.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Asociacion factores\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.definicionbandasriesgo.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Definicion Bandasriesgo\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, ".");
        try {
            wizzard.definicionparametrosliquidez.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Definicion parametros liquidez\n" + ex.toString());
            ex.printStackTrace();
        }
        dialogo.setProgreso(1, " 50% ");
        try {
            wizzard.definicionparametrosrentabilidad.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Definicion parametros rentabilidad\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }

        try {
            wizzard.datosbasicos.setDatos(wizzard.getModelo().getNombre(), wizzard.getModelo().getTipoRiesgo(), wizzard.getModelo().getTipoModelo());
        } catch (Exception ex) {
            dialogo.setMensaje("No se pudo asiganr los datos basicos del modelo\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }

        try {
            //((JInternalFrame) this.wizzard.getParent().getParent().getParent().getParent()).setTitle("Modelos [" + wizzard.getModelo().getNombre() + "]");
            wizzard.asociacionfactores.setRelacionProductosFactores(wizzard.getModelo().getRelacionProductosFactores());
            wizzard.asociacionfactores.setRelacionEspeciesFactores(wizzard.getModelo().getRelacionEspeciesFactores());
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3n Factores" +
                    "No se pudo procesar la relaci\u00F3n de los factores\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }

        try {
            //============= Los keys para los colores de las filas nuevas ===============
            wizzard.asociacionfactoresmatriz.setKeyAdd(wizzard.asociacionfactores.getKeyAdd());
            wizzard.definicioncambioesperado.setKeyAdd(wizzard.asociacionfactores.getKeyAdd());
            //===========================================================================
            wizzard.asociacionfactoresmatriz.setRelacionMonedasFactores(wizzard.getModelo().getRelacionMonedasFactores());
            wizzard.asociacionfactoresmatriz.setPantallaAsociacionFactoresContratos(wizzard.asociacionfactores);
            if (this.wizzard.getModelo().getIdmatriz() != null && !this.wizzard.getModelo().getIdmatriz().equals(0)) {
                Hashtable dataMatriz = this.lookupMatrizCorrelacionSBBean().findById(this.wizzard.getModelo().getIdmatriz());
                MatrizDTO matriz = (MatrizDTO) dataMatriz.get("DTO");
                MatrizCorrelacionPK matrizPK = new MatrizCorrelacionPK(matriz.getNombre(), matriz.getFechaPublicacion());
                matrizPK.setId(matriz.getId());
                wizzard.asociacionfactoresmatriz.setComboMatricesPKSeleccion(matrizPK);
            }
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3in Factores Matriz" +
                    "No se pudo procesar la relaci\u00F3n de los factores\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }

        try {
            wizzard.definicionbandasriesgo.setBandas1(wizzard.getModelo().getBandas1riesgo());
            wizzard.definicionbandasriesgo.setBandas2(wizzard.getModelo().getBandas2riesgo());
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n de riesgo\n" +
                    "No se pudo procesar las bandas\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }

        try {
            wizzard.definicionparametrosliquidez.setBanda1(wizzard.getModelo().getBandas1liquidez());
            wizzard.definicionparametrosliquidez.setComportamientoLiquidezAcciones(wizzard.getModelo().getComportamientoAcciones());
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Parametros Liquidez\n" +
                    "No se pudo procesar las bandas o el comportamiento de la liquidez\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, ".");
        }
        try {
            if (wizzard.getModelo().getFechainicio() != null) {
                wizzard.definicionparametrosrentabilidad.setFecha(wizzard.getModelo().getFechainicio());
            } else {
                wizzard.definicionparametrosrentabilidad.setNodias(wizzard.getModelo().getNumdias());
            }

            wizzard.definicionparametrosrentabilidad.setTipoValoracionExtremos(wizzard.getModelo().getTipovaloracionpuntas());

            if (wizzard.obj != null) {
                wizzard.llaveRegistro = (Object[]) wizzard.obj;
            }
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n Parametros Rentabilidad\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(3, ".");
        }


        wizzard.datosbasicos.updateUI();
        try {
            wizzard.asociacionfactores.updateUI();
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3n Factores\n"+ex.toString());
            ex.printStackTrace();            
        }
        try{
            wizzard.asociacionfactoresmatriz.updateUI();
        } catch (Exception ex) {
            dialogo.setMensaje("Asociaci\u00F3n Factores Matriz\n"+ex.toString());
            ex.printStackTrace();            
        }        
        try{
            wizzard.definicionbandasriesgo.updateUI();
        } catch (Exception ex) {
            dialogo.setMensaje("Dewfinici\u00F3n Bandas Riesgo\n"+ex.toString());
            ex.printStackTrace();            
        }                
        try{
            wizzard.definicionparametrosliquidez.updateUI();
        } catch (Exception ex) {
            dialogo.setMensaje("Dewfinici\u00F3n Parametros liquidez\n"+ex.toString());
            ex.printStackTrace();            
        }                
        try {
            wizzard.configuracion.setNombreModelo(wizzard.getModelo().getNombre());
        } catch (Exception ex) {
            dialogo.setMensaje("Configuraci\u00F3nes Extras\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(1, ".");
        }

        try {
            wizzard.definicioncambioesperado.limpiarCampos();
        } catch (Exception ex) {
            dialogo.setMensaje("Definici\u00F3n de cambios esperados\n" +
                    "Limpiado los campos\n" + ex.toString());
            ex.printStackTrace();
        } finally {
            dialogo.setProgreso(5, " 100%");
        }

        try {
            wizzard.endThread();
        } catch (Exception ex) {
            dialogo.setMensaje("No se pudo terminar el hilo\n" + ex.toString());
            ex.printStackTrace();
        }

        setFinalizar();
        dialogo.setProgreso(0, wizzard.toString());
        wizzard.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

    }

    public void setFinalizar() {
        try {
            this.dialogo.setFinalizar();
            this.finalize();
        } catch (Throwable ex) {
            ex.printStackTrace();
        }
        this.wizzard.repaint();
        this.wizzard.updateUI();
    }

    private ejb.metrica.matriz.correlacion.MatrizCorrelacionSBBean lookupMatrizCorrelacionSBBean() {
        return new MatrizCorrelacionSBBean();
        /*try {
            Properties prop_ = new Properties();
            prop_.put(Context.INITIAL_CONTEXT_FACTORY, ig.util.ejb.IGBean.INITIAL_CONTEXT_FACTORY);
            String Sockec = new ig.util.ConexionServer().getSocketServer();
            prop_.put(Context.PROVIDER_URL, Sockec);

            javax.naming.Context c = new javax.naming.InitialContext(prop_);
            Object remote = c.lookup("MatrizCorrelacionSBBean");
            ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome rv = (ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome) javax.rmi.PortableRemoteObject.narrow(remote, ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome.class);
            return rv.create();
        } catch (javax.naming.NamingException ne) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        } catch (javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ce);
            throw new RuntimeException(ce);
        } catch (java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", re);
            throw new RuntimeException(re);
        }*/
    }
}
